package com.ys.tdm.dao.module.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Repository;

import com.ys.tdm.bean.module.Module;
import com.ys.tdm.dao.module.IModuleDao;
import com.ys.tdm.templ.MybatisTemplate;
import com.ys.tdm.util.StringTools;
import com.ys.tdm.util.UUIDGenerator;




/**
 * 模块信息Dao实现
 * @author Troy
 * @date 2017-12-26 13:18:54
 */
@Repository
public class ModuleDaoImpl extends MybatisTemplate implements IModuleDao {

	@Override
	public Module getModuleById(String id) throws Exception {
		return (Module)this.selectOne("ModuleXML.getModuleById", id);
	}
	
	@Override
	public List<Module> getModuleByIds(String ids) throws Exception {
		Map<String,Object> params = new HashMap<String, Object>();
		params.put("ids", ids);
		return this.selectList("ModuleXML.getModuleByIds", params);
	}
	
	@Override
	public List<Module> getModuleByIdsList(List<String> ids) throws Exception {
		return this.selectList("ModuleXML.getModuleByIdsList", ids);
	}

	@Override
	public List<Module> getAll(Module module) throws Exception {
		return this.selectList("ModuleXML.getAll", module);
	}

	
	@Override
	public int getByPageCount(Module module)throws Exception {
		return this.selectOne("ModuleXML.getByPageCount", module);
	}

	@Override
	public void insertModule(Module module) throws Exception {
		if (null != module) {
			module.setId(UUIDGenerator.generate());
			module.setCreateTime(new Date());
			module.setUpdateTime(new Date());
			this.insert("ModuleXML.insertModule", module);
		}
	}
	
	@Override
	public void insertModuleBatch(List<Module> modules) throws Exception {
		if(CollectionUtils.isNotEmpty(modules)){
			for (Module module : modules) {
				if (null != module) {
					module.setId(UUIDGenerator.generate());
					module.setCreateTime(new Date());
				}
			}
			this.insert("ModuleXML.insertModuleBatch", modules);
		}
	}
	
	@Override
	public void delModuleById(String id) throws Exception {
		this.delete("ModuleXML.delModuleById", id);
	}
	
	@Override
	public void delModuleByIds(String ids) throws Exception {
		Map<String,Object> params = new HashMap<String, Object>();
		params.put("ids", ids);
		this.delete("ModuleXML.delModuleByIds", params);
	}
	
	@Override
	public void delModuleByIdsList(List<String> ids) throws Exception {
		this.delete("ModuleXML.delModuleByIdsList", ids);
	}
	
	@Override
	public int updateModule(Module module) throws Exception {
		if (null != module) {
			module.setUpdateTime(new Date());
			/**清理不需要更新的数据*/
		    this.cleanWhenUpdate(module);
			return this.update("ModuleXML.updateModule", module);
		} else {
			return 0;
		}
	}
	
	@Override
	public int updateModuleByIds(String ids,Module module) throws Exception {
		ids = StringTools.converString(ids);
		if (StringUtils.isNotBlank(ids) && null != module) {
			module.setUpdateTime(new Date());
			Map<String,Object> params = new HashMap<String, Object>();
			params.put("ids", ids);
			/**清理不需要更新的数据*/
		    this.cleanWhenUpdate(module);
			params.put("module", module);
			return this.update("ModuleXML.updateModuleByIds", params);
		} else {
			return 0;
		}
		
	}
	
	@Override
	public int updateModuleByIdsList(List<String> ids,Module module) throws Exception {
		if (CollectionUtils.isNotEmpty(ids) && null != module) {
			module.setUpdateTime(new Date());
			Map<String,Object> params = new HashMap<String, Object>();
			params.put("ids", ids);
			/**清理不需要更新的数据*/
		    this.cleanWhenUpdate(module);
			params.put("module", module);
			return this.update("ModuleXML.updateModuleByIdsList", params);
		} else {
			return 0;
		}
	}
	
	@Override
	public int updateModuleList(List<Module> modules) throws Exception {
		if(CollectionUtils.isNotEmpty(modules)){
			for (Module module : modules) {
				if (null != module) {
					module.setUpdateTime(new Date());
					/**清理不需要更新的数据*/
					this.cleanWhenUpdate(module);
				}
			}
			return this.update("ModuleXML.updateModuleList", modules);
		} else {
			return 0;
		}
	}
	
	/**
	 * 清理不需要更新的数据
	 * @param orderRebok
	 * @Description:
	 * @author wentaoxiang 2016年6月1日 下午5:19:16
	 */
	private void cleanWhenUpdate(Module module) {
		module.setCreateTime(null);
		module.setCreator(null);
	}
	
	//------------api------------
}

